package com.cskaoyan.advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.stereotype.Component;

/**
 * 提供一个计算方法执行时间的通知
 * @author stone
 * @date 2022/12/20 17:32
 */
// 默认的组件id：customAdvice
@Component
public class CustomAdvice implements MethodInterceptor {
    @Override
    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
        long start = System.currentTimeMillis();
        Object proceed = methodInvocation.proceed();// 类似于method.invoke，执行的是委托类的方法
        long end = System.currentTimeMillis();

        long cost = end - start;
        System.out.println(methodInvocation.getMethod().getName() + "执行时间为：" + cost);

        return proceed; // 可以返回proceed，或处理后返回
        // 这个返回值就是代理对象执行方法的返回值
    }
}
